package cn.zqy.demo2.day01.demo03;

/**
 *  String类有这样的描述：字符串是常量，它们的值在创建后不能被更改,
 *  StringBuilder:  String 的字符串缓冲区
 *      public StringBuilder()：构造一个空的StringBuilder容器。
 *      public StringBuilder(String str)：构造一个StringBuilder容器，并将字符串添加进去。
 *
 * */
public class Demo02StringBuilder {
    public static void main(String[] args) {
       /* 1.String和StringBuilder的区别：对字符串进行拼接操作，String都会构建一个新的String对象
       StringBuilder在原基础上操作*/

       // Object的hashCode()默认是返回内存地址的，但是hashCode()可以重写,
       // System.identityHashCode(Object)方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法。
       String a1 = "abc";
       System.out.println(System.identityHashCode(a1));
       a1 = a1 + "df";
       System.out.println(System.identityHashCode(a1)); // 此处地址明显改变

        System.out.println("========");

        StringBuilder a2 = new StringBuilder("abc");
        System.out.println(System.identityHashCode(a2));
        // 只能用append拼接
        a2.append("www");
        System.out.println(System.identityHashCode(a2));   // 没有改变


        // append(任意类型),可以采用类似jq的链式写法，因为总是返回StringBuilder
        a2.append(true).append(78).append("kkk");
        System.out.println(a2);  // abcwwwtrue78kkk
    }
}
